¾î¶»°Ô º¸¸é ±âº»ÀÎ °Í °°Àºµ¥¿ä. ÀÇ¿Ü·Î ¸¹Àº ºÐµéÀÌ Àß ¸ð¸£½Ã´Â °Í °°¾Æ¼ À̾߱âÇغ¾´Ï´Ù.
¾×¼¼½º¹ÙÀ̿÷¹ÀÌ¼Ç ¿¡·¯°¡ ¹ß»ýÇÏ¸é ¿¡·¯°¡ ³ À§Ä¡ÀÇ ÁÖ¼Ò°ªÀ» 16Áø¼ö·Î º¸¿©ÁÝ´Ï´Ù. ±× ȸéÀ» º» »ç¿ëÀÚ´Â Å« ÀÏÀÌ¶óµµ ³ ÁÙ ¾Ë°í ¹Ù·Î ¿¬¶ôÇÏ´Â °æ¿ì°¡ ¸¹Àºµ¥¿ä. ±× ȸéÀÇ ³»¿ëÀ» ÀüÈ·Î ÁÙÁÙÁÙ ´Ù Àоî Áֱ⵵ ÇÏ°í, ĸÃÄÇؼ º¸³»Áֱ⵵ ÇÏÁÒ.
±×·±µ¥ Á¤ÀÛ ±×°É º¸´Â °³¹ßÀÚ´Â ±× ¼ýÀÚ°¡ ÀǹÌÇÏ´Â °Ô ¹ºÁöµµ Àß ¸ð¸£°í, ±×°É °¡Áö°í ¹» ÇØ¾ß ÇÏ´ÂÁöµµ Àß ¸ð¸£´Â °æ¿ì°¡ ¸¹½À´Ï´Ù.
¹°·Ð, µð¹ö±ë ÁßÀ̶ó¸é Find Error ¸Þ´º·Î ÇÑ ¹æ¿¡ ãÀ» ¼ö Àִµ¥¿ä. »ç¿ëÀÚ°¡ ÀÌ È¸é¸¸ µþ¶û º¸³»¿Â °æ¿ì¶ó¸é ±× ÁÖ¼Ò°ª¸¸À¸·Î ¿¡·¯³ À§Ä¡¸¦ ã¾Æ¾ß ÇÕ´Ï´Ù.
¸Þ¸ð¸® ÁÖ¼Ò°ªÀ» ¼³¸íÇÏ´Â °ÍÀ̹ǷΠÁ¤È®ÇÑ ÁÖ¼Ò·Î ¼³¸íÇϱâ À§Çؼ ÷ºÎÇÑ ¼Ò½º¸¦ °¡Áö°í ¼³¸íÇÏ°Ú½À´Ï´Ù. (Âü°í·Î µ¨ÆÄÀÌ7ÀÔ´Ï´Ù. ´Ù¸¥ ¹öÀü¿¡¼´Â ¿©±â¼ ¼³¸íÇÏ´Â ÁÖ¼Ò°ª°ú ´Ù¸¦ ¼ö ÀÖÀ¸³ª ³»¿ëÀº µ¿ÀÏÇÕ´Ï´Ù.)
¼Ò½º¸¦ º¾½Ã´Ù.
Form1Create¿¡¼´Â Label1.Caption ¿¡´Ù°¡ HInstance¸¦ IntToHex·Î º¸¿©ÁÖµµ·Ï Çß°í, (±×³É Âü°íÇϽöó°í)
Button1Click¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ÄÚµùÇؼ ¾×¼¼½º¹ÙÀ̿÷¹ÀÌ¼Ç ¿¡·¯°¡ ¶ß°Ô Çß½À´Ï´Ù.
31: procedure TForm1.Button1Click(Sender: TObject); 32: var 33: P: Pointer; 34: i: Integer; 35: S: String; 36: begin 37: 38: P := Pointer( 99999999 ); 39: 40: i := Integer( P^ ); 41: 42: S := IntToStr( i ); 43: 44: end;
ÄÄÆÄÀÏ&½ÇÇàÇغ¸¸é Label1¿¡´Â $00400000 ¶ó°í ½á ÀÖ°í, ¹öÆ°À» Ŭ¸¯Çϸé
Access violation at address 0044EBA9 in module 'Project1.exe' read of address 05FF5E0FF
¶ó´Â ¿¡·¯ ¸Þ¼¼Áö°¡ ¶å´Ï´Ù. ¿©±â¼ ¸»ÇÏ´Â address 0044EBA9 ÀÌ ÁÖ¼Ò°ªÀ¸·Î ¼Ò½ºÄÚµåÀÇ ¾î´À À¯´Ö ¸î ¹ø° ¶óÀÎÀÎÁö¸¦ ¾Ë ¼ö Àִµ¥¿ä. ±×³ÉÀº ¾Ë ¼ö ¾ø°í ´ÙÀ½°ú °°ÀÌ ÇØ¾ß ÇÕ´Ï´Ù.
¡Ü ÇÁ·ÎÁ§Æ® ¿É¼ÇÀ» ¿±´Ï´Ù. (Shift+Control+F11, Project->Options)
¡Ü Linker ÅÇÀ» ¿±´Ï´Ù.
¡Ü Map fileÀ» Á¦ÀÏ ¹Ø¿¡ ÀÖ´Â Detailed¸¦ Ŭ¸¯ÇÕ´Ï´Ù.
¡Ü Build All
±×¸®°í ³ª¼ ¼Ò½ºÄڵ尡 ÀÖ´Â Æú´õ¿¡ º¸¸é Project1.map¶ó´Â ÆÄÀÏÀÌ ¸¸µé¾îÁ® ÀÖÀ» °Ì´Ï´Ù. ±×°É ¸Þ¸ðÀåÀ¸·Î ¿±´Ï´Ù. ´Ù¸¥ °Ç ´Ù¸¥ ÀÚ·áµé ã¾Æ¼ °øºÎÇØ º¸½Ã°í, ¿©±â¼ ¼³¸íÇÏ´Â °Ç ¸ÊÆÄÀÏÀÇ °¡Àå ¾Æ·§ºÎºÐÀÔ´Ï´Ù. °¡Àå ¾Æ·§ºÎºÐ¿¡´Â ´ÙÀ½°ú °°ÀÌ ³ª¿Í ÀÖ½À´Ï´Ù.
Line numbers for Unit1(Unit1.pas) segment .text
27 0001:0004DB00 28 0001:0004DB18 29 0001:0004DB70 36 0001:0004DB90 38 0001:0004DBA4 40 0001:0004DBA9 42 0001:0004DBAB 44 0001:0004DBD2 46 0001:0004DC08 46 0001:0004DC0F
Line numbers for Project1(C:\»õ Æú´õ\Project1.dpr) segment .text
9 0001:0004DE18 10 0001:0004DE28 11 0001:0004DE34 12 0001:0004DE4C 13 0001:0004DE58
Bound resource files
c:\program files\borland\delphi7\Lib\Buttons.res c:\program files\borland\delphi7\Lib\ExtDlgs.res c:\program files\borland\delphi7\Lib\Controls.res Unit1.dfm Project1.res Project1.drf
Program entry point at 0001:0004DE18
ÀÌ Áß¿¡¼µµ °¡Àå À ¶óÀÎÀ» º¸¸é
Line numbers for Unit1(Unit1.pas) segment .text ¶ó°í µÇ¾î Àִµ¥,
¸» ±×´ë·Î ¼Ò½ºÄÚµåÀÇ ¶óÀεéÀÇ ÁÖ¼Ò°ªµéÀÌ ³ª¿Í ÀÖ½À´Ï´Ù.
27 0001:0004DB00¶ó´Â °ÍÀº
27¶óÀÎÀÇ 0001¹ø° ±ÛÀÚºÎÅÍÀÇ ¼Ò½ºÄڵ尡 0004DB00¹øÁö·Î ¸¸µé¾îÁ³´Ù´Â ¶æÀÔ´Ï´Ù.
¿¡·¯°¡ ³ ÁÖ¼Ò°¡ $0044EBA9 ¿´ÁÒ?
ÀÌ ÁÖ¼Ò °ª¿¡¼ HInstanceÀÎ $00400000¸¦ »®´Ï´Ù.(Win32ÀÇ °æ¿ìÀÔ´Ï´Ù.)
±×¸®°í PEÆ÷¸ËÀÇ Çì´õ µî ºÒÇÊ¿äÇÑ ¾ÕºÎºÐ »çÀÌÁîÀÎ $1000 µµ »®´Ï´Ù.
±×·¯¸é $0004DBA9 °¡ µË´Ï´Ù.
Line numbers for Unit1(Unit1.pas) ¼½¼Ç¿¡¼ $0004DBA9¸¦ ã¾Æ º¾½Ã´Ù.
¸î ¶óÀÎÀΰ¡¿ä?
40 0001:0004DBA9 À̶ó°í µÇ¾î ÀÖ½À´Ï´Ù.
±×·¯¹Ç·Î ¿¡·¯°¡ ³ ºÎºÐÀº Unit1ÀÇ 40¶óÀÎ 0001¹ø° ±ÛÀÚÀÎ
i := Integer( P^ );
ÀÔ´Ï´Ù.
XP, Win2000, Win7, Win8, Win10¿¡¼ 32ºñÆ® EXEÀÇ HInstance´Â Ç×»ó $00400000 ÀÌ°í, µ¨ÆÄÀÌ·Î ¸¸µé¾îÁø EXEÀÇ PEÇì´õÁ¤º¸´Â Ç×»ó $1000 ¹ÙÀÌÆ®ÀÔ´Ï´Ù. ±×·¯¹Ç·Î ¿¡·¯°¡ ³ ÁÖ¼Ò´Â = ¿¡·¯È¸é¿¡ ³ª¿Â ÁÖ¼Ò - $00401000 ÇÏ¸é µË´Ï´Ù.
ÀÌ·¸°Ô ãÀ¸½Ã¸é µÇ´Âµ¥¿ä.
mapÆÄÀÏÀÌ ÀÖ¾î¾ßÇϹǷΠÇÁ·Î±×·¥À» ¹èÆ÷Çϱâ Àü¿¡ ¸ÊÆÄÀÏÀ» ¸¸µé¾î ³ö¾ß ÇÕ´Ï´Ù. ȤÀº ¾È ¸¸µé¾ú¾îµµ ³ªÁß¿¡ ¸¸µé¸é µÇ´Âµ¥, ´Ü, ¼Ò½ºÄڵ尡 ÃÖÁ¾ ÄÄÆÄÀϵÆÀ» ¶§ÀÇ ¸ð¾ç ±×´ë·Î ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¹°·Ð, »ç¿ëÇÑ ÄÞÆ÷³ÍÆ®±îÁö ÀüºÎ¿ä.
±×¸®°í ¸Ê¿¡ ¶óÀκ° ÁÖ¼Ò°ªÀº ÄÄÆÄÀÏ ÇÒ ´ç½Ã ½ÇÁ¦·Î ÄÄÆÄÀÏÇÑ À¯´Öµé¸¸ ³ª¿É´Ï´Ù. ±×·¯¹Ç·Î Graphics.pas¿Í °°ÀÌ Lib °æ·Î¿¡ dcu¸¸ ÀÖ°í pas°¡ ¾ø´Â À¯´ÖµéÀº Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. ¹Ù²ã¸»Çϸé Graphics.pasµµ ¸Ê¿¡ ¶óÀκ° ÁÖ¼Ò°ªÀ» ³²±â·Á¸é ±× À¯´Öµµ ÄÄÆÄÀÏÀÌ µÇµµ·Ï ÇÁ·ÎÁ§Æ® °æ·Î¿¡ °°ÀÌ µÎ´ø°¡ Lib¿¡ Graphics.pas¸¦ ³Ö´ø°¡ ÇÏ¸é µË´Ï´Ù.
³¡.
|